//route包函数封装
//route.go
package route

import (
	"fmt"
	"net/http"
)

/*【对比前代码】
type MyMux struct {
}
*/

type MyMux struct {
	handlers map[string][]*Handler //用于存储http.HandleFunc("/", SayhelloName) 格式的路由规则
}

type Handler struct {
	path string
	http.HandlerFunc
}

/*【对比前代码】
//新建的&结构体方法，框架中十分常用
func NewMyMux() *MyMux {
	return &MyMux{} //等同于  return new(MyMux)
}
*/

func NewMyMux() *MyMux {
	return &MyMux{make(map[string][]*Handler)}
}

func sayhelloName(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello MyMuxRoute!")
}

func (p *MyMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	//下面是路由处理，一般web框架会使用一个疯转函数统一处理
	if r.URL.Path == "/" {
		sayhelloName(w, r) //这是所有web框架路由的核心代码
		return
	}
	http.NotFound(w, r)
	return
}
